package middleware

import (
	"data_service/models"
	"fmt"
	"net/http"

	"github.com/gin-gonic/gin"
)

// AuthRequired 简化的认证中间件 - 只验证用户是否存在
func AuthRequired() gin.HandlerFunc {
	return func(c *gin.Context) {
		// 从请求头中获取用户邮箱
		email := c.GetHeader("X-User-Email")

		// 记录请求头信息用于调试
		fmt.Printf("Auth middleware - X-User-Email: %s\n", email)

		// 检查邮箱是否存在
		if email == "" {
			// 如果缺少邮箱信息，则中止请求并返回401 Unauthorized错误
			c.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{"error": "需要提供用户邮箱"})
			return
		}

		// 通过邮箱查询用户
		var user models.User
		err := models.GetDB().Where("email = ?", email).First(&user).Error

		if err != nil {
			// 如果找不到用户，则中止请求并返回401 Unauthorized错误
			fmt.Printf("Auth middleware - User not found for email: %s\n", email)
			c.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{"error": "用户不存在"})
			return
		}

		// 将用户信息存储在当前请求的上下文中，以便后续处理器使用
		c.Set("user", user)

		// 继续处理请求链中的下一个中间件或处理器
		c.Next()
	}
}
